/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Ui;

import java.awt.Color;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.regex.PatternSyntaxException;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import javax.swing.RowFilter;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

/**
 *
 * @author Esteban
 */
public class PanelSeleccionarProfesor extends javax.swing.JPanel {

    /**
     * Creates new form PanelSeleccionarProfesor
     */
    public PanelSeleccionarProfesor(VentanaModuloHorarioEstandar ventana, JDialog panelBuscarProf) {
        ventanaHorario=ventana;
        panel=panelBuscarProf;
        initComponents();
        initComponents2();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        campoBusquedaProfesor = new javax.swing.JTextField();
        pofesor = new javax.swing.JLabel();
        scrollProfesor = new javax.swing.JScrollPane();
        tablaProfesor = new javax.swing.JTable();
        horarioProf = new javax.swing.JLabel();
        btnConfirmar = new javax.swing.JButton();

        campoBusquedaProfesor.setFont(new java.awt.Font("Calibri", 0, 14)); // NOI18N
        campoBusquedaProfesor.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                campoBusquedaProfesorKeyReleased(evt);
            }
        });

        pofesor.setFont(new java.awt.Font("Calibri", 0, 16)); // NOI18N
        pofesor.setText("Buscar profesor:");

        scrollProfesor.setBorder(javax.swing.BorderFactory.createTitledBorder(new javax.swing.border.LineBorder(new java.awt.Color(153, 153, 153), 1, true), "Seleccione el profesor:", javax.swing.border.TitledBorder.LEFT, javax.swing.border.TitledBorder.TOP, new java.awt.Font("Calibri", 1, 18), new java.awt.Color(0, 102, 255))); // NOI18N

        tablaProfesor.setFont(new java.awt.Font("Calibri", 0, 14)); // NOI18N
        tablaProfesor.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Cédula", "Nombre"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tablaProfesor.setGridColor(new java.awt.Color(0, 102, 204));
        scrollProfesor.setViewportView(tablaProfesor);

        horarioProf.setFont(new java.awt.Font("Calibri", 0, 18)); // NOI18N
        horarioProf.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Img/horario.png"))); // NOI18N
        horarioProf.setText("Horario del Profesor");

        btnConfirmar.setFont(new java.awt.Font("Calibri", 0, 14)); // NOI18N
        btnConfirmar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Img/BlueCheck.png"))); // NOI18N
        btnConfirmar.setText("Confirmar Selección");
        btnConfirmar.setEnabled(false);
        btnConfirmar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                btnConfirmarMouseClicked(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(230, 230, 230)
                        .addComponent(horarioProf, javax.swing.GroupLayout.PREFERRED_SIZE, 224, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(41, 41, 41)
                        .addComponent(scrollProfesor, javax.swing.GroupLayout.PREFERRED_SIZE, 603, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(51, 51, 51)
                        .addComponent(pofesor)
                        .addGap(57, 57, 57)
                        .addComponent(campoBusquedaProfesor, javax.swing.GroupLayout.PREFERRED_SIZE, 363, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(245, 245, 245)
                        .addComponent(btnConfirmar)))
                .addContainerGap(41, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(45, 45, 45)
                .addComponent(horarioProf)
                .addGap(38, 38, 38)
                .addComponent(scrollProfesor, javax.swing.GroupLayout.PREFERRED_SIZE, 188, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 37, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(pofesor)
                    .addComponent(campoBusquedaProfesor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(34, 34, 34)
                .addComponent(btnConfirmar)
                .addGap(20, 20, 20))
        );
    }// </editor-fold>//GEN-END:initComponents

    private void campoBusquedaProfesorKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_campoBusquedaProfesorKeyReleased
        // TODO add your handling code here:
        busquedaProf();
    }//GEN-LAST:event_campoBusquedaProfesorKeyReleased

    private void btnConfirmarMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnConfirmarMouseClicked
        // TODO add your handling code here:
        setProfesorEscogido();
        ventanaHorario.limpiarTablaHorarioProfesor();
        cerrarPanel();
    }//GEN-LAST:event_btnConfirmarMouseClicked

    private void initComponents2(){
        scrollProfesor.getViewport().setBackground(Color.WHITE);
        
        ListSelectionModel listSelectionModel = tablaProfesor.getSelectionModel();
        listSelectionModel.addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) { 
                ListSelectionModel lsm = (ListSelectionModel)e.getSource();
                if(!lsm.isSelectionEmpty()){
                    puedeConfirmar();
                }
                else{
                    noPuedeConfirmar();
                }
            }
        });
    
    }
    
    private void puedeConfirmar(){
        btnConfirmar.setEnabled(true);
    }
    
    private void noPuedeConfirmar(){
        btnConfirmar.setEnabled(false);
    }
    
    private void busquedaProf(){
        TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tablaProfesor.getModel());
        tablaProfesor.setRowSorter(sorter);
        if(campoBusquedaProfesor.getText().isEmpty()){
            sorter.setRowFilter(null);
        }    
        else{
            try{
                sorter.setRowFilter(RowFilter.regexFilter(campoBusquedaProfesor.getText()));
            }catch (PatternSyntaxException pse) {
                System.err.println("Bad regex pattern");
            }
        }
    }
    
    public void cargarProfesoresActivos(){
        Connection conexion=null;
        Statement sentencia=null;
        ResultSet resultado=null;
        Object[][] profesores=null;
        
        try {
            Class.forName("org.postgresql.Driver");
        }catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        try{
            conexion = DriverManager.getConnection(cadenaConexion);
            sentencia = conexion.createStatement();
        
            String consultaSQL = "select cedula,nombre,apellido1,apellido2 from profesor where activo='true'";
            resultado = sentencia.executeQuery(consultaSQL);
            int profesoresSize=0;
            while(resultado.next()){
                profesoresSize++;
            }
            
            if(profesoresSize!=0){
                profesores=new Object[profesoresSize][2];
                profesoresSize=0;
                Statement sentencia2 = conexion.createStatement();
                ResultSet resultado2 = sentencia2.executeQuery(consultaSQL);
                while (resultado2.next()) {
                    profesores[profesoresSize][0]=resultado2.getString("cedula").replaceAll("\\s+","");
                    profesores[profesoresSize][1]=resultado2.getString("nombre").replaceAll("\\s+","")+" "+resultado2.getString("apellido1").replaceAll("\\s+","");  
                    if(resultado2.getString("apellido2")!=null){
                        profesores[profesoresSize][1]=profesores[profesoresSize][1]+" "+resultado2.getString("apellido2").replaceAll("\\s+",""); 
                    }
                    profesoresSize++;
                }
            }
                    
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(this, "\n Imposible cargar los profesores activos del sistema \n Error en la base de datos", "Error", JOptionPane.ERROR_MESSAGE);
            e.printStackTrace();
            conexion = null;
        }
        finally {
            if (resultado != null) {
                try {
                    resultado.close();
                } catch (Exception e) {
                e.printStackTrace();
                }
            }
            if (sentencia != null) {
                try {
                    sentencia.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if (conexion != null) {
                try {
                    conexion.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        
        tablaProfesor.setModel(new javax.swing.table.DefaultTableModel(
            profesores,
                
            new String [] {
                "Cédula", "Nombre completo"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });  
        
        tablaProfesor.getColumnModel().getColumn(0).setMaxWidth(95);
        tablaProfesor.getColumnModel().getColumn(0).setMinWidth(95);
        
    }
    
    private void setProfesorEscogido(){
        ventanaHorario.setProfesorEscogidoHorario((String)tablaProfesor.getValueAt(tablaProfesor.getSelectedRow(), 0),(String)tablaProfesor.getValueAt(tablaProfesor.getSelectedRow(), 1));
    }
    
    private void cerrarPanel(){
        panel.setVisible(false);
        panel.dispose();
        panel=null;
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnConfirmar;
    private javax.swing.JTextField campoBusquedaProfesor;
    private javax.swing.JLabel horarioProf;
    private javax.swing.JLabel pofesor;
    private javax.swing.JScrollPane scrollProfesor;
    private javax.swing.JTable tablaProfesor;
    // End of variables declaration//GEN-END:variables
    static String cadenaConexion = "jdbc:postgresql://localhost/SMAAMDB?" + "user=postgres&password=root";
    private VentanaModuloHorarioEstandar ventanaHorario;
    private JDialog panel;
}
